package ScalaStudy.chapter06

object Test13_Trait {
  def main(args: Array[String]): Unit = {


    /////////////////////////////////////////////////////////////////////////////////////////
    ////////////////////////////////////////   trait ///////////////////////////////////////
    /////////////////////////////////////////////////////////////////////////////////////////


    //调用
    val student: Student13 = new Student13
    student.sayHello()

    println("==========================")

    student.study()

    println("==========================")

    student.dating()

    println("==========================")

    student.play()

  }
}

//定义一个父类

class Person13{
  val name: String = "persion"
  var age:Int = 18
  def sayHello(): Unit = {
    println("hello from: " + name)
  }
}

//定义一个特质,特质可以使用抽象方法和属性

trait Young{
  //声明抽象和非抽象属性
  var age: Int
  val name: String = "young"

  //声明抽象和非抽象方法
  def play():Unit = {
    println("young people is playing")
  }
  def dating():Unit
}

class Student13 extends Person13 with Young{                //多重继承
  //实现抽象方法
  def dating():Unit = {
    println(s"${name}和女孩约会中")                           //这里面的name是特质中的name
  }
  //重写并实现抽象属性
  override val name: String = "A学生"
  //定义新方法
  def study():Unit = {
    println(s"${age}的${name}正在学习")                      //age调用父类的内容
  }
  //重写父类方法
  override def sayHello():Unit = {
    super.sayHello()
    println("重写: hello from student: " + name)
  }

}
